home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-01 / dkbsrc.zip / DKBPROTO.H < prev    next >
C/C++ Source or Header  |  1991-05-04  |  22KB  |  402 lines

  1. /*****************************************************************************
  2. *
  3. *                                     dkbproto.h
  4. *
  5. *   from DKBTrace (c) 1990  David Buck
  6. *
  7. *  This module defines the prototypes for all system-independent functions.
  8. *
  9. * This software is freely distributable. The source and/or object code may be
  10. * copied or uploaded to communications services so long as this notice remains
  11. * at the top of each file.  If any changes are made to the program, you must
  12. * clearly indicate in the documentation and in the programs startup message
  13. * who it was who made the changes. The documentation should also describe what
  14. * those changes were. This software may not be included in whole or in
  15. * part into any commercial package without the express written consent of the
  16. * author.  It may, however, be included in other public domain or freely
  17. * distributed software so long as the proper credit for the software is given.
  18. *
  19. * This software is provided as is without any guarantees or warranty. Although
  20. * the author has attempted to find and correct any bugs in the software, he
  21. * is not responsible for any damage caused by the use of the software.  The
  22. * author is under no obligation to provide service, corrections, or upgrades
  23. * to this package.
  24. *
  25. * Despite all the legal stuff above, if you do find bugs, I would like to hear
  26. * about them.  Also, if you have any comments or questions, you may contact me
  27. * at the following address:
  28. *
  29. *     David Buck
  30. *     22C Sonnet Cres.
  31. *     Nepean Ontario
  32. *     Canada, K2H 8W7
  33. *
  34. *  I can also be reached on the following bulleton boards:
  35. *
  36. *     OMX              (613) 731-3419
  37. *     Mystic           (613) 596-4249  or  (613) 596-4772
  38. *
  39. *  Fidonet:   1:163/109.9
  40. *  Internet:  dbuck@ccs.carleton.ca
  41. *  The "You Can Call Me RAY" BBS    (708) 358-5611
  42. *
  43. *  IBM Port by Aaron A. Collins. Aaron may be reached on the following BBS'es:
  44. *
  45. *     The "You Can Call Me RAY" BBS (708) 358-5611
  46. *     The Information Exchange BBS  (708) 945-5575
  47. *
  48. *****************************************************************************/
  49.  
  50.  
  51. /* Prototypes for functions defined in trace.c */
  52. void usage PARAMS((void));
  53. void init_vars PARAMS((void));
  54. void close_all PARAMS((void));
  55. void get_defaults PARAMS((void));
  56. void read_options PARAMS((char *file_name));
  57. void parse_option PARAMS((char *Option_String));
  58. void parse_file_name PARAMS((char *File_Name));
  59. void Print_Options PARAMS((void));
  60. void print_stats PARAMS((void));
  61. FILE *Locate_File PARAMS((char *filename, char *mode));
  62.  
  63. /* Prototypes for functions defined in render.c */
  64. void initialize_renderer PARAMS((void));
  65. void Read_Rendered_Part PARAMS((void));
  66. void Create_Ray PARAMS((RAY *ray, int width, int height, DBL x, DBL y));
  67. void Supersample PARAMS((COLOUR *result, int x, int y, int Width,int Height));
  68. void Start_Tracing PARAMS((void));
  69. void Trace PARAMS((RAY *Ray, COLOUR *Colour));
  70. void check_stats PARAMS((register int y));
  71. void allocate_lines PARAMS((COLOUR **Previous_Line, COLOUR **Current_Line, char **Previous_Line_Antialiased_Flags, char **Current_Line_Antialiased_Flags, RAY *Ray));
  72. void output PARAMS((register int y, COLOUR **Previous_Line, COLOUR **Current_Line, char **Previous_Line_Antialiased_Flags, char **Current_Line_Antialiased_Flags));
  73.  
  74. /* Prototypes for functions defined in tokenize.c */
  75. void Initialize_Tokenizer PARAMS((char *Input_File_Name));
  76. void Terminate_Tokenizer PARAMS((void));
  77. void Tokenize PARAMS((char *name));
  78. int Process_Token PARAMS((void));
  79. int Skip_Spaces PARAMS((DATA_FILE *Data_File));
  80. int Parse_Comments PARAMS((DATA_FILE *Data_File));
  81. void Begin_String PARAMS((void));
  82. void Stuff_Character PARAMS((int c, DATA_FILE *Data_File));
  83. void End_String PARAMS((DATA_FILE *Data_File));
  84. int Read_Float PARAMS((DATA_FILE *Data_File));
  85. void Parse_String PARAMS((DATA_FILE *Data_File));
  86. int Read_Symbol PARAMS((DATA_FILE *Data_File));
  87. int Find_Reserved PARAMS((void));
  88. int Find_Symbol PARAMS((void));
  89. void Write_Token PARAMS((int Token_Id, DATA_FILE *Data_File));
  90. void Token_Error PARAMS((DATA_FILE *Data_File, char *str));
  91. void Get_Token PARAMS((void));
  92. void Unget_Token PARAMS((void));
  93.  
  94. /* Prototypes for functions defined in parse.c */
  95. void Parse PARAMS((FRAME *Frame_Ptr));
  96. void Token_Init PARAMS((void));
  97. void Frame_Init PARAMS((void));
  98. COMPOSITE *Get_Composite_Object PARAMS((void));
  99. SPHERE *Get_Sphere_Shape PARAMS((void));
  100. QUADRIC *Get_Quadric_Shape PARAMS((void));
  101. QUARTIC *Get_Quartic_Shape PARAMS((void));
  102. PLANE *Get_Plane_Shape PARAMS((void));
  103. TRIANGLE *Get_Triangle_Shape PARAMS((void));
  104. SMOOTH_TRIANGLE *Get_Smooth_Triangle_Shape PARAMS((void));
  105. CSG_SHAPE *Get_CSG_Shape PARAMS((void));
  106. CSG_SHAPE *Get_CSG_Union PARAMS((void));
  107. CSG_SHAPE *Get_CSG_Intersection PARAMS((void));
  108. OBJECT *Get_Object PARAMS((void));
  109. TEXTURE *Get_Texture PARAMS((void));
  110. VIEWPOINT *Get_Viewpoint PARAMS((void));
  111. COLOUR *Get_Colour PARAMS((void));
  112. VECTOR *Get_Vector PARAMS((void));
  113. DBL *Get_Float PARAMS((void));
  114. TRANSFORMATION *Get_Transformation PARAMS((void));
  115. DBL Parse_Float PARAMS((void));
  116. void Parse_Vector PARAMS((VECTOR *Given_Vector));
  117. void Parse_Coeffs PARAMS((DBL *Given_Coeffs));
  118. void Parse_Colour PARAMS((COLOUR *Given_Colour));
  119. COLOUR_MAP *Parse_Colour_Map PARAMS((void));
  120. TEXTURE *Copy_Texture PARAMS((TEXTURE *Texture));
  121. TEXTURE *Parse_Texture PARAMS((void));
  122. SHAPE *Parse_Sphere PARAMS((void));
  123. SHAPE *Parse_Plane PARAMS((void));
  124. SHAPE *Parse_Triangle PARAMS((void));
  125. SHAPE *Parse_Smooth_Triangle PARAMS((void));
  126. SHAPE *Parse_Quadric PARAMS((void));
  127. SHAPE *Parse_Quartic PARAMS((void));
  128. CSG_SHAPE *Parse_CSG PARAMS((int type, OBJECT *Parent_Object));
  129. SHAPE *Parse_Shape PARAMS((OBJECT *Object));
  130. OBJECT *Parse_Object PARAMS((void));
  131. OBJECT *Parse_Composite PARAMS((void));
  132. void Parse_Fog PARAMS((void));
  133. void Add_Composite_Light_Source PARAMS ((COMPOSITE *Object));
  134. void Parse_Frame PARAMS((void));
  135. void Parse_Viewpoint PARAMS((VIEWPOINT *Given_Vp));
  136. void Parse_Declare PARAMS((void));
  137. void Init_Viewpoint PARAMS((VIEWPOINT *vp));
  138. void Link PARAMS((OBJECT *New_Object,OBJECT **Field,OBJECT **Old_Object_List));
  139. CONSTANT Find_Constant PARAMS((void));
  140. char *Get_Token_String PARAMS((TOKEN Token_Id));
  141. void Parse_Error PARAMS((TOKEN Token_Id));
  142. void Type_Error PARAMS((void));
  143. void Undeclared PARAMS((void));
  144. void Error PARAMS((char *str));
  145.  
  146. /* Prototypes for functions defined in objects.c */
  147. INTERSECTION *Object_Intersect PARAMS((OBJECT *Object, RAY *Ray));
  148. int All_Composite_Intersections PARAMS((OBJECT *Object, RAY *Ray, PRIOQ *Depth_Queue));
  149. int All_Object_Intersections PARAMS((OBJECT *Object, RAY *Ray, PRIOQ *Depth_Queue));
  150. int Inside_Basic_Object PARAMS((VECTOR *point, OBJECT *Object)); 
  151. int Inside_Composite_Object PARAMS((VECTOR *point, OBJECT *Object));
  152. void *Copy_Basic_Object PARAMS((OBJECT *Object));
  153. void *Copy_Composite_Object PARAMS((OBJECT *Object));
  154. void Translate_Basic_Object PARAMS((OBJECT *Object, VECTOR *Vector));
  155. void Rotate_Basic_Object PARAMS((OBJECT *Object, VECTOR *Vector));
  156. void Scale_Basic_Object PARAMS((OBJECT *Object, VECTOR *Vector));
  157. void Translate_Composite_Object PARAMS((OBJECT *Object, VECTOR *Vector));
  158. void Rotate_Composite_Object PARAMS((OBJECT *Object, VECTOR *Vector));
  159. void Scale_Composite_Object PARAMS((OBJECT *Object, VECTOR *Vector));
  160. void Invert_Basic_Object PARAMS((OBJECT *Object));
  161. void Invert_Composite_Object PARAMS((OBJECT *Object));
  162.  
  163. /* Prototypes for functions defined in spheres.c */
  164. int All_Sphere_Intersections PARAMS((OBJECT *Object, RAY *Ray, PRIOQ *Depth_Queue));
  165. int Intersect_Sphere PARAMS((RAY *Ray, SPHERE *Sphere, DBL *Depth1, DBL *Depth2));
  166. int Inside_Sphere PARAMS((VECTOR *point, OBJECT *Object));
  167. void Sphere_Normal PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *Intersection_Point));
  168. void *Copy_Sphere PARAMS((OBJECT *Object));
  169. void Translate_Sphere PARAMS((OBJECT *Object, VECTOR *Vector));
  170. void Rotate_Sphere PARAMS((OBJECT *Object, VECTOR *Vector));
  171. void Scale_Sphere PARAMS((OBJECT *Object, VECTOR *Vector));
  172. void Invert_Sphere PARAMS((OBJECT *Object));
  173.  
  174. /* Prototypes for functions defined in quadrics.c */
  175. int All_Quadric_Intersections PARAMS((OBJECT *Object, RAY *Ray, PRIOQ *Depth_Queue));
  176. int Intersect_Quadric PARAMS((RAY *Ray, QUADRIC *Shape, DBL *Depth1, DBL *Depth2));
  177. int Inside_Quadric PARAMS((VECTOR *point, OBJECT *Object));
  178. void Quadric_Normal PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *Intersection_Point));
  179. void *Copy_Quadric PARAMS((OBJECT *Object));
  180. void Transform_Quadric PARAMS((QUADRIC *Shape, TRANSFORMATION *Transformation));
  181. void Quadric_To_Matrix PARAMS((QUADRIC *Quadric, MATRIX *Matrix));
  182. void Matrix_To_Quadric PARAMS((MATRIX *Matrix, QUADRIC *Quadric));
  183. void Translate_Quadric PARAMS((OBJECT *Object, VECTOR *Vector));
  184. void Rotate_Quadric PARAMS((OBJECT *Object, VECTOR *Vector));
  185. void Scale_Quadric PARAMS((OBJECT *Object, VECTOR *Vector));
  186. void Invert_Quadric PARAMS((OBJECT *Object));
  187.  
  188. /* Prototypes for functions defined in quartics.c */
  189. int All_Quartic_Intersections PARAMS((OBJECT *Object, RAY *Ray, PRIOQ *Depth_Queue));
  190. int Intersect_Quartic PARAMS((RAY *Ray, QUARTIC *Shape, DBL *Depths));
  191. int Inside_Quartic PARAMS((VECTOR *point, OBJECT *Object));
  192. void Quartic_Normal PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *Intersection_Point));
  193. void *Copy_Quartic PARAMS((OBJECT *Object));
  194. void Translate_Quartic PARAMS((OBJECT *Object, VECTOR *Vector));
  195. void Rotate_Quartic PARAMS((OBJECT *Object, VECTOR *Vector));
  196. void Scale_Quartic PARAMS((OBJECT *Object, VECTOR *Vector));
  197. void Invert_Quartic PARAMS((OBJECT *Object));
  198. int roll_term_indices PARAMS((int i, int j, int k));
  199. void unroll_term_indices PARAMS((int power, int index, int *i, int *j, int *k, int *l));
  200. DBL do_partial_term PARAMS((MATRIX *q, int row, int power, int i, int j, int k, int l));
  201. void Transform_Quartic PARAMS((QUARTIC *Shape, MATRIX *q ));
  202.  
  203. /* Prototypes for functions defined in triangle.c */
  204. void Find_Triangle_Dominant_Axis PARAMS((TRIANGLE *Triangle));
  205. int Compute_Triangle  PARAMS((TRIANGLE *Triangle));
  206. void Compute_Smooth_Triangle  PARAMS((SMOOTH_TRIANGLE *Triangle));
  207. int All_Triangle_Intersections  PARAMS((OBJECT *Object, RAY *Ray, PRIOQ *Depth_Queue));
  208. int Intersect_Triangle  PARAMS((RAY *Ray, TRIANGLE *Triangle, DBL *Depth));
  209. int Inside_Triangle  PARAMS((VECTOR *point, OBJECT *Object));
  210. void Triangle_Normal  PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *Intersection_Point));
  211. void *Copy_Triangle  PARAMS((OBJECT *Object));
  212. void Translate_Triangle  PARAMS((OBJECT *Object, VECTOR *Vector));
  213. void Rotate_Triangle  PARAMS((OBJECT *Object, VECTOR *Vector));
  214. void Scale_Triangle  PARAMS((OBJECT *Object, VECTOR *Vector));
  215. void Invert_Triangle  PARAMS((OBJECT *Object));
  216. void Smooth_Triangle_Normal  PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *Intersection_Point));
  217. void *Copy_Smooth_Triangle PARAMS((OBJECT *Object));
  218. void Translate_Smooth_Triangle  PARAMS((OBJECT *Object, VECTOR *Vector));
  219. void Rotate_Smooth_Triangle  PARAMS((OBJECT *Object, VECTOR *Vector));
  220. void Scale_Smooth_Triangle  PARAMS((OBJECT *Object, VECTOR *Vector));
  221. void Invert_Smooth_Triangle  PARAMS((OBJECT *Object));
  222.  
  223. /* Prototypes for functions defined in vect.c */
  224. int solve_quadratic PARAMS((DBL *x, DBL *y));
  225. int solve_cubic PARAMS((DBL *x, DBL *y));
  226. int solve_quartic PARAMS((DBL *x, DBL *y));
  227. int polysolve PARAMS((int order, DBL *Coeffs, DBL *roots));
  228.  
  229. /* Prototypes for functions defined in lighting.c */
  230. void Colour_At PARAMS((COLOUR *Colour, TEXTURE *Texture, VECTOR *Intersection_Point));
  231. void Perturb_Normal PARAMS((VECTOR *New_Normal, TEXTURE *Texture, VECTOR *Intersection_Point, VECTOR *Surface_Normal));
  232. void Ambient PARAMS((TEXTURE *Texture, VECTOR *Intersection_Point, COLOUR *Surface_Colour, COLOUR *Colour));
  233. void Diffuse PARAMS((TEXTURE *Texture, VECTOR *Intersection_Point, RAY *Eye, VECTOR *Surface_Normal, COLOUR *Surface_Colour, COLOUR *Colour));
  234. void do_light PARAMS((OBJECT *Light_Source, DBL *Light_Source_Depth, RAY *Light_Source_Ray, VECTOR *Intersection_Point));
  235. void do_blocking PARAMS((OBJECT *Blocking_Object, INTERSECTION *Local_Intersection, COLOUR *Light_Colour));
  236. void do_phong PARAMS((TEXTURE *Texture, RAY *Light_Source_Ray, VECTOR Eye, VECTOR *Surface_Normal, COLOUR *Colour, COLOUR *Light_Colour, COLOUR *Surface_Colour));
  237. void do_specular PARAMS((TEXTURE *Texture, RAY *Light_Source_Ray, VECTOR REye, VECTOR *Surface_Normal, COLOUR *Colour, COLOUR *Light_Colour, COLOUR *Surface_Colour));
  238. void do_diffuse PARAMS((TEXTURE *Texture, RAY *Light_Source_Ray, VECTOR *Surface_Normal, COLOUR *Colour, COLOUR *Light_Colour, COLOUR *Surface_Colour));
  239. void Reflect PARAMS((TEXTURE *Texture, VECTOR *Intersection_Point, RAY *Ray, VECTOR *Surface_Normal, COLOUR *Colour));
  240. void Refract PARAMS((TEXTURE *Texture, VECTOR *Intersection_Point, RAY *Ray, VECTOR *Surface_Normal, COLOUR *Colour));
  241. void Fog PARAMS((DBL Distance, COLOUR *Fog_Colour, DBL Fog_Distance, COLOUR *Colour));
  242. void Compute_Reflected_Colour PARAMS ((RAY *Ray, TEXTURE *Texture, INTERSECTION *Intersection, COLOUR *Surface_Colour, COLOUR *Emitted_Colour));
  243. void Determine_Surface_Colour PARAMS ((INTERSECTION *Intersection, COLOUR *Colour, RAY *Ray, int Shadow_Ray));
  244.  
  245. /* Prototypes for functions defined in prioq.c */
  246. void pq_init PARAMS((void));
  247. PRIOQ *pq_alloc PARAMS((void));
  248. void pq_free PARAMS((PRIOQ *pq));
  249. PRIOQ *pq_new PARAMS((int index_size));
  250. void pq_balance PARAMS((PRIOQ *q, unsigned int entry_pos1));
  251. void pq_add PARAMS((PRIOQ *q, INTERSECTION *entry));
  252. INTERSECTION *pq_get_highest PARAMS((PRIOQ *q));
  253. int pq_is_empty PARAMS((PRIOQ *q));
  254. void pq_delete_highest PARAMS((PRIOQ *q));
  255.  
  256. /* Prototypes for functions defined in texture.c */
  257. void Compute_Colour PARAMS((COLOUR *Colour,COLOUR_MAP *Colour_Map,DBL value));
  258. void Initialize_Noise PARAMS((void));
  259. void InitTextureTable PARAMS((void));
  260. void InitRTable PARAMS((void));
  261. int R PARAMS((VECTOR *v));
  262. int Crc16 PARAMS((char *buf, int count));
  263. void setup_lattice PARAMS((DBL *x, DBL *y, DBL *z, long *ix, long *iy, long *iz, long *jx, long *jy, long *jz, DBL *sx, DBL *sy, DBL *sz, DBL *tx, DBL *ty, DBL *tz));
  264. DBL Noise PARAMS((DBL x, DBL y, DBL z));
  265. void DNoise PARAMS((VECTOR *result, DBL x, DBL y, DBL z));
  266. DBL cycloidal PARAMS((DBL value));
  267. DBL Triangle_Wave PARAMS((DBL value));
  268. DBL Turbulence PARAMS((DBL x, DBL y, DBL z));
  269. void DTurbulence PARAMS((VECTOR *result, DBL x, DBL y, DBL z));
  270. int Bozo PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, COLOUR *Colour));
  271. int marble PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, COLOUR *colour));
  272. void ripples PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, VECTOR *Vector));
  273. void waves PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, VECTOR *Vector));
  274. int wood PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, COLOUR *colour));
  275. void checker PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, COLOUR *colour));
  276. void checker_texture PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, COLOUR *colour));
  277. void spotted PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, COLOUR *Colour));
  278. void bumps PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, VECTOR *normal));
  279. void dents PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, VECTOR *normal));
  280. void agate PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, COLOUR *colour));
  281. void wrinkles PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, VECTOR *normal));
  282. void granite PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, COLOUR *Colour));
  283. void gradient PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, COLOUR *Colour));
  284. void texture_map PARAMS((DBL x, DBL y, DBL z, TEXTURE *Texture, COLOUR *colour));
  285. void Translate_Texture PARAMS((TEXTURE **Texture_Ptr, VECTOR *Vector));
  286. void Rotate_Texture PARAMS((TEXTURE **Texture_Ptr, VECTOR *Vector));
  287. void Scale_Texture PARAMS((TEXTURE **Texture_Ptr, VECTOR *Vector));
  288.  
  289. /* Prototypes for functions defined in csg.c */
  290. int All_CSG_Union_Intersections PARAMS((OBJECT *Object, RAY *Ray, PRIOQ *Depth_Queue));
  291. int All_CSG_Intersect_Intersections PARAMS((OBJECT *Object, RAY *Ray, PRIOQ *Depth_Queue)); 
  292. int Inside_CSG_Union PARAMS((VECTOR *point, OBJECT *Object));
  293. int Inside_CSG_Intersection PARAMS((VECTOR *point, OBJECT *Object));
  294. void *Copy_CSG PARAMS((OBJECT *Object));
  295. void Translate_CSG PARAMS((OBJECT *Object, VECTOR *Vector));
  296. void Rotate_CSG PARAMS((OBJECT *Object, VECTOR *Vector));
  297. void Scale_CSG PARAMS((OBJECT *Object, VECTOR *Vector));
  298. void Invert_CSG PARAMS((OBJECT *Object)); 
  299. void Set_CSG_Parents PARAMS((CSG_SHAPE *, OBJECT *));
  300.  
  301. /* Prototypes for functions defined in colour.c */
  302. DBL Colour_Distance PARAMS((COLOUR *colour1, COLOUR *colour2));
  303. void Add_Colour PARAMS((COLOUR *result, COLOUR *colour1, COLOUR *colour2));
  304. void Scale_Colour PARAMS((COLOUR *result, COLOUR *colour, DBL factor));
  305. void Clip_Colour PARAMS((COLOUR *result, COLOUR *colour)); 
  306.  
  307. /* Prototypes for functions defined in viewpnt.c */
  308. void *Copy_Viewpoint PARAMS((OBJECT *Object));
  309. void Translate_Viewpoint PARAMS((OBJECT *Object, VECTOR *Vector));
  310. void Rotate_Viewpoint PARAMS((OBJECT *Object, VECTOR *Vector));
  311. void Scale_Viewpoint PARAMS((OBJECT *Object, VECTOR *Vector));
  312.  
  313. /* Prototypes for functions defined in ray.c */
  314. void Make_Ray PARAMS((RAY *r));
  315. void Initialize_Ray_Containers PARAMS((RAY *Ray));
  316. void Copy_Ray_Containers PARAMS((RAY *Dest_Ray, RAY *Source_Ray));
  317. void Ray_Enter PARAMS((RAY *ray, TEXTURE *texture));
  318. void Ray_Exit PARAMS((RAY *ray));
  319.  
  320. /* Prototypes for functions defined in planes.c */
  321. int All_Plane_Intersections PARAMS((OBJECT *Object, RAY *Ray, PRIOQ *Depth_Queue));
  322. int Intersect_Plane PARAMS((RAY *Ray, PLANE *Plane, DBL *Depth));
  323. int Inside_Plane PARAMS((VECTOR *point, OBJECT *Object));
  324. void Plane_Normal PARAMS((VECTOR *Result, OBJECT *Object, VECTOR *Intersection_Point));
  325. void *Copy_Plane PARAMS((OBJECT *Object));
  326. void Translate_Plane PARAMS((OBJECT *Object, VECTOR *Vector));
  327. void Rotate_Plane PARAMS((OBJECT *Object, VECTOR *Vector));
  328. void Scale_Plane PARAMS((OBJECT *Object, VECTOR *Vector));
  329. void Invert_Plane PARAMS((OBJECT *Object));
  330.  
  331. /* Prototypes for functions defined in iff.c */
  332. void iff_error PARAMS((void));
  333. int read_byte PARAMS((FILE *f));
  334. int read_word PARAMS((FILE *f));
  335. long read_long PARAMS((FILE *f));
  336. void Read_Chunk_Header PARAMS((FILE *f, CHUNK_HEADER *dest)); 
  337. void Read_Iff_Image PARAMS((IMAGE *Image, char *filename));
  338.  
  339. /* Prototypes for functions defined in gif.c */
  340. int out_line PARAMS((unsigned char *pixels, int linelen));
  341. int get_byte PARAMS((void));
  342. void Read_Gif_Image PARAMS((IMAGE *Image, char *filename));
  343.  
  344. /* Prototypes for functions defined in gifdecod.c */
  345. void cleanup_gif_decoder PARAMS((void));
  346. short init_exp PARAMS((short size));
  347. short get_next_code PARAMS((void));
  348. short decoder PARAMS((short linewidth));
  349.  
  350. /* Prototypes for functions defined in amiga.c */
  351. void display_finished PARAMS((void));
  352. void display_init PARAMS((int width, int height));
  353. void display_close PARAMS((void));
  354. void display_plot PARAMS((int x, int y, char Red, char Green, char Blue));
  355.  
  356. /* Prototypes for functions defined in matrices.c */
  357. void MZero PARAMS((MATRIX *result));
  358. void MIdentity PARAMS((MATRIX *result));
  359. void MTimes PARAMS((MATRIX *result, MATRIX *matrix1, MATRIX *matrix2));
  360. void MAdd PARAMS((MATRIX *result, MATRIX *matrix1, MATRIX *matrix2));
  361. void MSub PARAMS((MATRIX *result, MATRIX *matrix1, MATRIX *matrix2));
  362. void MScale PARAMS((MATRIX *result, MATRIX *matrix1, DBL amount));
  363. void MTranspose PARAMS((MATRIX *result, MATRIX *matrix1));
  364. void MTransformVector PARAMS((VECTOR *result, VECTOR *vector, TRANSFORMATION *transformation));
  365. void MInverseTransformVector PARAMS((VECTOR *result, VECTOR *vector, TRANSFORMATION *transformation));
  366. void Get_Scaling_Transformation PARAMS((TRANSFORMATION *result, VECTOR *vector));
  367. void Get_Inversion_Transformation PARAMS((TRANSFORMATION *result));
  368. void Get_Translation_Transformation PARAMS((TRANSFORMATION *transformation, VECTOR *vector));
  369. void Get_Rotation_Transformation PARAMS((TRANSFORMATION *transformation, VECTOR *vector));
  370. void Get_Look_At_Transformation PARAMS((TRANSFORMATION *transformation, VECTOR *Look_At, VECTOR *Up, VECTOR *Right));
  371. void Compose_Transformations PARAMS((TRANSFORMATION *Original_Transformation, TRANSFORMATION *New_Transformation));
  372.  
  373. /* Prototypes for functions defined in dump.c */
  374. FILE_HANDLE *Get_Dump_File_Handle PARAMS((void));
  375. char *Default_Dump_File_Name PARAMS((void));
  376. int Open_Dump_File PARAMS((FILE_HANDLE *handle, char *name,
  377.                            int *width, int *height, int buffer_size, int mode));
  378. void Write_Dump_Line PARAMS((FILE_HANDLE *handle, COLOUR *line_data, int line_number));
  379. int Read_Dump_Line PARAMS((FILE_HANDLE *handle, COLOUR *line_data, int *line_number));
  380. int Read_Dump_Int_Line PARAMS((FILE_HANDLE *handle, IMAGE_LINE *line_data, int *line_number));
  381. void Read_Dump_Image PARAMS((IMAGE *Image, char *filename));
  382. void Close_Dump_File PARAMS((FILE_HANDLE *handle));
  383.  
  384. /* Prototypes for functions defined in targa.c */
  385. FILE_HANDLE *Get_Targa_File_Handle PARAMS((void));
  386. char *Default_Targa_File_Name PARAMS((void));
  387. int Open_Targa_File PARAMS((FILE_HANDLE *handle, char *name,
  388.                            int *width, int *height, int buffer_size, int mode));
  389. void Write_Targa_Line PARAMS((FILE_HANDLE *handle, COLOUR *line_data, int line_number));
  390. int Read_Targa_Line PARAMS((FILE_HANDLE *handle, COLOUR *line_data, int *line_number));
  391. void Close_Targa_File PARAMS((FILE_HANDLE *handle));
  392.  
  393. /* Prototypes for functions defined in Raw.c */
  394. FILE_HANDLE *Get_Raw_File_Handle PARAMS((void));
  395. char *Default_Raw_File_Name PARAMS((void));
  396. int Open_Raw_File PARAMS((FILE_HANDLE *handle, char *name,
  397.                            int *width, int *height, int buffer_size, int mode));
  398. void Write_Raw_Line PARAMS((FILE_HANDLE *handle, COLOUR *line_data, int line_number));
  399. int Read_Raw_Line PARAMS((FILE_HANDLE *handle, COLOUR *line_data, int *line_number));
  400. void Close_Raw_File PARAMS((FILE_HANDLE *handle));
  401.  
  402.